package com.ppch.zerocodegenerator.config;

import cn.hutool.core.util.StrUtil;
import dev.langchain4j.community.store.memory.chat.redis.RedisChatMemoryStore;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Redis对话记忆存储配置类
 * 1.实现方式一：使用LangChain4j默认支持的，在同一个AiService内部通过MemoryId来实现对话记忆隔离
 * 2.实现方式二：通过应用ID创建不同的AiService实例来实现对话记忆隔离，每个实例内部使用一个RedisChatMemoryStore
 * 本项目采用方式二
 */
@Configuration
@ConfigurationProperties(prefix = "spring.data.redis")
@Data
public class RedisChatMemoryStoreConfig {

    private String host;

    private int port;

    private String password;

    private long ttl;

    @Bean
    public RedisChatMemoryStore redisChatMemoryStore() {
        RedisChatMemoryStore.Builder builder = RedisChatMemoryStore.builder()
                .host(host)
                .port(port)
                .password(password)
                .ttl(ttl);
        // 如果有密码，则设置用户名，否则会报错
        if(StrUtil.isNotBlank(password)){
            builder.user("default");
        }
        return builder.build();
    }
}
